import os
from celery import Celery
from celery.schedules import crontab

# 设置默认Django设置模块
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')

app = Celery('ts')

# 使用CELERY作为配置前缀
app.config_from_object('django.conf:settings', namespace='CELERY')

# 添加队列配置
app.conf.task_queues = {
    'default': {
        'exchange': 'default',
        'routing_key': 'default'
    },
    'graph': {  # 图谱构建队列
        'exchange': 'graph',
        'routing_key': 'graph'
    },
    'tech_insight': {  # 技术洞察队列
        'exchange': 'tech_insight',
        'routing_key': 'tech_insight'
    },
    'phase_summary': {  # 阶段总结队列
        'exchange': 'phase_summary',
        'routing_key': 'phase_summary'
    }
}

# 任务路由配置
app.conf.task_routes = {
    'graph.tasks.*': {'queue': 'graph'},
    'tech_insight.tasks.*': {'queue': 'tech_insight'},
    'phase_summary.tasks.*': {'queue': 'phase_summary'}
}

# 设置定时任务
app.conf.beat_schedule = {
    # 每月1日生成月度报告
    'generate-monthly-reports': {
        'task': 'phase_summary.tasks.generate_monthly_reports',
        'schedule': crontab(day_of_month='1', hour='0', minute='0'),
    },
    # 每季度生成季度报告（1月1日、4月1日、7月1日、10月1日）
    'generate-quarterly-reports': {
        'task': 'phase_summary.tasks.generate_quarterly_reports',
        'schedule': crontab(day_of_month='1', month_of_year='1,4,7,10', hour='1', minute='0'),
    },
    # 每年1月1日生成年度报告
    'generate-yearly-reports': {
        'task': 'phase_summary.tasks.generate_yearly_reports',
        'schedule': crontab(day_of_month='1', month_of_year='1', hour='2', minute='0'),
    },
}
app.conf.beat_max_loop_interval = 3600
# 自动发现任务
app.autodiscover_tasks()

# 系统启动时执行初始化任务
@app.on_after_finalize.connect
def setup_initial_tasks(sender, **kwargs):
    print("\n=== Django启动，执行初始化任务 ===")
    from phase_summary.tasks import generate_initial_reports
    result = generate_initial_reports.delay()
    print(f"初始化任务ID: {result.id}") 